home *** CD-ROM | disk | FTP | other *** search
-
- ; :Program. Printf.s
- ; :Author. Volker Rudolph
- ; :Address. Lettow-Vorbeck-Str. 11 / 6750 Kaiserslautern 26
- ; :Phone. 06301/8566
- ; :Version. 1.0
- ; :Date. 28.11.1989
- ; :Copyright. PD
- ; :Language. Assembler / Oberon
- ; :Translator. A68k(Freeware) / Amiga-Oberon V1.17.1
- ; :Contents. Allzweck-Textausgabe in Form der C-Funktion Printf
- ; :Usage. Aufruf und Parameter wie in C
-
- XREF OberonLib.StackChk
- XREF Printf_SPrintf,Printf.WriteProc
- XDEF Printf.Printf0,Printf.Printf1,Printf.Printf2,Printf.Printf3,Printf.Printf4,
- XDEF Printf.Printf5,Printf.Printf6
-
- bufSize EQU 120 ; Size of output-buffer
-
- SECTION Module,CODE
-
- Printf.Printf0:
- moveq #0,d7
- bra.s Printf
-
- Printf.Printf1:
- moveq #1,d7
- bra.s Printf
-
- Printf.Printf2:
- moveq #2,d7
- bra.s Printf
-
- Printf.Printf3:
- moveq #3,d7
- bra.s Printf
-
- Printf.Printf4:
- moveq #4,d7
- bra.s Printf
-
- Printf.Printf5:
- moveq #5,d7
- bra.s Printf
-
- Printf.Printf6:
- moveq #6,d7
- ;bra.s Printf
-
- Printf: ;d7: Anzahl Parameter
- move.l d7,d0
- lsl.l #2,d0
- add.l #bufSize+44,d1 ; 11 Register
- jsr OberonLib.StackChk
-
- movem.l d2-d7/a2-a6,-(sp)
- lea.l -bufSize(sp),sp
- move.l sp,d4 ;d4: Ausgabe-Puffer
-
- move.l d7,d0 ;d0: Schleifen-Zähler
- subq.l #1,d0
-
- move.l d7,d1 ;d1: Kopier-Offset
- lsl.l #2,d1
- move.l d1,d2
- add.l #28+44+bufSize,d1 ; 28 = 4+3*(4+4)
-
- addq.l #6,d2
- move.l d2,-(sp)
-
- moveq.l #bufSize-1,d3 ;Parameter für SPrintf(buffer,,,,) und
-
- move.l d4,-(sp) ;writeProc(buffer) auf den Stack legen
- move.l d3,-(sp)
-
- move.l d4,-(sp) ;writeProc(buffer) auf den Stack legen
- move.l d3,-(sp)
-
- move.l 0(sp,d1.l),-(sp) ;str
- move.l 4(sp,d1.l),-(sp)
-
- tst.l d7
- beq.s noArgs
-
- loop:
- move.l 0(sp,d1.l),-(sp)
- dbra d0,loop
-
- noArgs:
- jsr Printf_SPrintf ;Sprintf aufrufen
- jsr Printf.WriteProc
- move.l (sp)+,d0
- ^ lea.l bufSize(sp),sp
- movem.l (sp)+,d2-d7/a2-a6
- move.l (sp)+,a0
- add.l d0,sp
- jmp (a0)
-
- END
-